# -*- coding: utf-8 -*-
'''
校花网图片，使用正则爬取
'''
import os
import re
import urllib.request

import requests

# 创建存储图片目录
dirName = 'ImgLibs'
if not os.path.exists(dirName):
    os.mkdir(dirName)

url = 'http://www.521609.com/tuku/mxxz/'
proxies = {"http": None, "https": None}
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
}
# 使用requests的text属性抓取页面源码后发现中文乱码，使用content属性获取二进制内容，然后使用转为str即可避免
html = requests.get(url=url, proxies=proxies, headers=headers).content
html_doc=str(html,'utf-8')
# print(html_doc)

regular = re.compile('<li>.*?<img src="(.*?)" alt="(.*?)" />.*?</li>', re.S)
img_src_list = re.findall(regular, html_doc)
# print(img_src_list)

for i in img_src_list:
    src = 'http://www.521609.com' + i[0]
    '''
    因为图片名称中可能含有以下8个特殊字符从而无法作为文件名使用os模块打开,
    随便看了下只有一个？号所以就把这个替换为空了,如果特殊符号过多又不想挨个替换还是直接换个文件名吧
    8个特殊字符为： ? * : " < > \ / |
    '''
    name = i[1].replace('?', '')
    imgPath = dirName + '\\' + name + '.jpg'
    # 该方法可以直接下载图片，前提是网站没有屏蔽urllib模块，否则还是使用requests模块(可以携带headers头)加open方法下载
    urllib.request.urlretrieve(src, imgPath)
    print(imgPath, '下载完成')